package com.bdqn.buyer;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * JDK实现InvocationHandler动态代理
 */
public class IntermediaryInvocationHandler implements InvocationHandler {

    /**
     * 被代理的目标对象
     */
    private Object target;

    public void setTarget(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 在调用实际业务之前做些事情
        before();
        // 通过反射执行目标对象的实际业务
        Object feedback = method.invoke(target, args);
        // 在调用实际业务之后做些事情
        after();
        return feedback;
    }

    private void before() {
        System.out.println("前期准备");
        System.out.println("根据客户需要，找到合适的房源");
        System.out.println("联系卖方，确认可以带客户去看房");
        System.out.println("去小区跟保安说明情况，带客户看房");
    }

    private void after() {
        System.out.println("后期跟踪");
        System.out.println("如果有问题，询问具体的问题");
        System.out.println("如果没有问题，联系卖家签合同");
    }

}
